feat(web): filter sidebar threads by environment - #8530
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (1)
Included review availability: Your plan provides up to 10 included reviews per hour; 6 remain after this review. 📝 WalkthroughWalkthroughThe sidebar adds a session-only environment filter. It hides matching threads, drafts, and project entries, maintains valid selections as environments connect or disconnect, and documents the new controls. ChangesSidebar environment filtering
Priority: ➖ Normal Estimated code review effort: 3 (Moderate) | ~20 minutes Change: Feature Sequence Diagram(s)sequenceDiagram
participant User
participant EnvironmentMenu
participant Sidebar
participant ThreadList
participant DraftRows
User->>EnvironmentMenu: Toggle an environment
EnvironmentMenu->>Sidebar: Update disabled environment ids
Sidebar->>ThreadList: Recompute visible threads
Sidebar->>DraftRows: Recompute visible drafts
ThreadList-->>User: Show enabled-environment threads
DraftRows-->>User: Show enabled-environment drafts
Suggested reviewers: Merge Risk: ⚪ Minimal · up to The sidebar filter consistently applies to threads, drafts, and project choices while preserving a valid enabled-environment selection. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This PR adds a new environment-filtering interaction to the sidebar and integrates it with thread, draft, project-scope, selection, and empty-state behavior. The feature is production-facing and has enough stateful UI surface to warrant human review. No code changes detected at You can add or adjust custom eligibility rules. Learn more. |
258c853 to
8983e13
Compare
Dismissing prior approval to re-evaluate 8983e13
There was a problem hiding this comment.
One consistency finding on the new environment-filter trigger: it is the only icon SidebarMenuButton in this header row without the coarse-pointer hit-target overlay its neighbors use. Everything else (Menu/MenuPopup/MenuCheckboxItem composition, width-class contract on MenuPopup, active-filter dot matching PullRequestListFilters) matches the shared component system.
Posted via Macroscope — UI Consistency
14ed67b to
72c948d
Compare
There was a problem hiding this comment.
Two consistency findings on the new environment filter control in apps/web/src/components/Sidebar.tsx. Everything else (dot indicator matching PullRequestListFilters, MenuPopup width contract, SidebarMenuButton icon-color indirection) lines up with the existing system.
Posted via Macroscope — UI Consistency
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit d80e30b. Configure here.
There was a problem hiding this comment.
One finding on the new commit: the locked environment row explains its constraint with a native title attribute instead of the shared Tooltip primitive. Details inline.
Posted via Macroscope — UI Consistency
There was a problem hiding this comment.
One finding on the newest commit: the environment checkbox rows now pin data-highlighted text colors, which overrides MenuCheckboxItem's accent-surface foreground contract.
Posted via Macroscope — UI Consistency
|
Note 🤖 GPT-6 Astra (preview) responding on behalf of Theo This note is part of an automated cleanup pass. Documentation carryover from #9241 at 32c1c96: update |
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
5a95053 to
abf6424
Compare
Dismissing prior approval to re-evaluate abf6424
|
Docs carryover from #9241 is addressed in abf6424: |
abf6424 to
02c5cb5
Compare
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
02c5cb5 to
8c4fd21
Compare

With several environments connected, the sidebar mixes every environment's threads, and nothing narrows the list to one machine.
This adds an Environments menu beside the sidebar project picker. It only appears when more than one environment is connected. You pick which environments contribute threads, or choose All environments to restore everything. At least one environment always stays selected: the last one is locked in the menu, with a tooltip saying why. The project and environment filters combine. Pinned rows, active rows, settled rows, and drafts all use the same selection. The project picker only offers projects that exist in an enabled environment, and a dot on the trigger shows a filter is on. The filter lasts for the session only. Environments that disconnect are dropped from it during render, so the list can never show an empty frame.
docs/user/thread-sidebar.mdnow explains both filters and how to clear each one, as Theo's carryover note asked.The branch is one commit rebased onto current
main(211618fd9f). Nothing onmainor in other PRs already does this. The environment-pruning sync is a render-time state adjustment, so noset-state-in-effectlint warning.Verification
vp test run apps/web/src/components/Sidebar.logic.test.ts: 168 passedapps/webtypecheck: no errors in the touched files (main currently has 23 pre-existing errors in the unrelatedmarkdown-incremental/HighlightedCodeLinesperf commits)vp linton the touched files: 0 errors, warnings only on pre-existing intentional patternsvp fmt --checkon the touched files passesReal client proof
These captures compare base
e3b644c5afwith the previous head5a9505325, whose UI matches this head exactly. They were taken in the full web client at 1280×800 with two real disposable servers paired through the normal UI.Before:
After:
Before clean video · After clean video · After annotated video
Not covered at runtime: Electron, relay/tunnel, and disconnected-environment journeys. Focused logic tests cover composition, pruning, and the last-enabled guard. Mobile has its own thread list and is outside this change.
Originally implemented with GPT-6 in Codex; rebased and modernized with Claude Opus 5 in Claude Code (T3 Code); rebased onto
211618fd9fand re-verified with Devin (SWE-2 Medium, Cursor harness). The cross-provider GPT-6 Astra review was skipped because the Codex weekly usage limit was reached.Coordination trace: T3 thread 8f36d80e-338d-4f7c-8770-3dc2adcc6744
Summary by CodeRabbit
New Features
Documentation